package pe.edu.upc.dsd.whereeat.controller;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import pe.edu.upc.dsd.esb.whereeat.component.service.PlatoServiceComponent;
import pe.edu.upc.dsd.whereeat.domain.Plato;
import pe.edu.upc.dsd.whereeat.domain.Restaurant;
import pe.edu.upc.dsd.whereeat.domain.Usuario;


@Controller
public class PlatoController {
	
	@Autowired
	private PlatoServiceComponent platoServiceComponent;
			
	public List<Plato> listPlato;
	
	public static final String estado = "A";
	
	public HttpSession sesssion=null;
	 
	@RequestMapping("/plato/ingresar.htm")
	public ModelAndView ingresar(HttpServletRequest request,
		HttpServletResponse response) throws Exception {		
		
		sesssion = request.getSession();
		
		sesssion.removeAttribute("listPlato");
		
		listPlato = new ArrayList<Plato>();
		
		Usuario usuario = new Usuario();
		
		usuario = (Usuario) sesssion.getAttribute("usuario");		
		
		listPlato = platoServiceComponent.obtenerPlatosPorRestaurant(usuario.getCodigo());
		
		sesssion.setAttribute("listPlato", listPlato);
		
		return new ModelAndView("plato/lisPlato");
	}
	
	@SuppressWarnings("unchecked")
	@RequestMapping("/plato/ingresarEdit.htm")
	public ModelAndView ingresarEdit(HttpServletRequest request,
		HttpServletResponse response) throws Exception {		
		
		sesssion = request.getSession();
		
		listPlato = (ArrayList<Plato>)sesssion.getAttribute("listPlato") == null ? new ArrayList<Plato>() :
							(ArrayList<Plato>)sesssion.getAttribute("listPlato") ;
		
		String codigoPlato = request.getParameter("codigoPlato")!=null ? request.getParameter("codigoPlato") : "";
		
		for (Plato p : listPlato) {
			if (p.getCodigo() == Integer.parseInt(codigoPlato) ){
				sesssion.setAttribute("plato", p);
			}
		}
		
		return new ModelAndView("plato/ediPlato");
	}

	
	@RequestMapping("/plato/ingresarSave.htm")
	public ModelAndView saveRegistro(HttpServletRequest request,
		HttpServletResponse response) throws Exception {
		
		return new ModelAndView("plato/regPlato");
	}
	
	@RequestMapping("/plato/save.htm")
	public ModelAndView save(HttpServletRequest request,
		HttpServletResponse response) throws Exception {
		
		sesssion = request.getSession();
		
		Restaurant r= new Restaurant();
		
		Usuario usuario= new Usuario();
		
		usuario = (Usuario) sesssion.getAttribute("usuario");
		
		String nombrePlato = request.getParameter("txtNombrePlato")!=null ? request.getParameter("txtNombrePlato") : "";
		String categoriaPlato = request.getParameter("txtCategoria")!=null ? request.getParameter("txtCategoria") : "";
		String descripcionPlato = request.getParameter("txaDescripcion")!=null ? request.getParameter("txaDescripcion") : "";
		String fechaPublicacion = request.getParameter("txtFecPubli")!=null ? request.getParameter("txtFecPubli") : "";
				
		
		r.setCodigo(usuario.getCodigo());
		r.setNombre(usuario.getNombres());
				
		Plato p = new Plato(r,categoriaPlato,nombrePlato,descripcionPlato,new Date(fechaPublicacion),
				new Date(),estado);
		
		platoServiceComponent.guardarPlato(p);
				
		return new ModelAndView("redirect:/plato/ingresar.htm");		
	}


	@RequestMapping("/plato/update.htm")
	public ModelAndView update(HttpServletRequest request,
		HttpServletResponse response) throws Exception {
		
		sesssion = request.getSession();
		
		Restaurant r= new Restaurant();
		
		Usuario usuario= new Usuario();
				
		String codigoPlato = request.getParameter("txtCodPlato")!=null ? request.getParameter("txtCodPlato") : "";
		String nombrePlato = request.getParameter("txtNombrePlato")!=null ? request.getParameter("txtNombrePlato") : "";
		String categoriaPlato = request.getParameter("txtCategoria")!=null ? request.getParameter("txtCategoria") : "";
		String descripcionPlato = request.getParameter("txaDescripcion")!=null ? request.getParameter("txaDescripcion") : "";
		String fechaPublicacion = request.getParameter("txtFecPubli")!=null ? request.getParameter("txtFecPubli") : "";
		
		
		r.setCodigo(usuario.getCodigo());
		r.setNombre(usuario.getNombres());
		
		Plato p = new Plato(Integer.parseInt(codigoPlato),r,categoriaPlato,nombrePlato, descripcionPlato, new Date() , 
			new Date(), estado);
		
		platoServiceComponent.actualizarPlato(p);
		
		return new ModelAndView("redirect:/plato/ingresar.htm");
	}
	
	@RequestMapping("/plato/delete.htm")
	public ModelAndView delete(HttpServletRequest request,
		HttpServletResponse response) throws Exception {
				
		sesssion = request.getSession();
		
		String codigoPlato = request.getParameter("codigoPlato")!=null ? request.getParameter("codigoPlato") : "";
		
		Plato p = new Plato();
		p.setCodigo(Integer.parseInt(codigoPlato));

		platoServiceComponent.eliminarPlato(p);
		
		return new ModelAndView("redirect:/plato/ingresar.htm");
	}
		
}
